Fix gcc warning and clean a piece of code in arch_set_info_guest to avoid
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Wed, 22 Feb 2006 18:38:50 +0000 (19:38 +0100)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Wed, 22 Feb 2006 18:38:50 +0000 (19:38 +0100)
AP of HVM domain going to a wrong code path.

Signed-off-by: Xin Li <xin.b.li@intel.com>
xen/arch/x86/domain.c

index 7584201bfb1b9762a2d395cc63167433622939da..fd9ffd7530981efd6358c181187c56c186517213 100644 (file)
@@ -346,7 +346,7 @@ int arch_set_info_guest(
     struct vcpu *v, struct vcpu_guest_context *c)
 {
     struct domain *d = v->domain;
-    unsigned long phys_basetab;
+    unsigned long phys_basetab = INVALID_MFN;
     int i, rc;
 
     /*
@@ -421,7 +421,14 @@ int arch_set_info_guest(
     if ( (rc = (int)set_gdt(v, c->gdt_frames, c->gdt_ents)) != 0 )
         return rc;
 
-    if ( shadow_mode_refcounts(d) )
+    if ( c->flags & VGCF_HVM_GUEST )
+    {
+        v->arch.guest_table = mk_pagetable(0);
+
+        if ( !hvm_initialize_guest_resources(v) )
+            return -EINVAL;
+    }
+    else if ( shadow_mode_refcounts(d) )
     {
         if ( !get_page(mfn_to_page(phys_basetab>>PAGE_SHIFT), d) )
         {
@@ -429,7 +436,7 @@ int arch_set_info_guest(
             return -EINVAL;
         }
     }
-    else if ( !(c->flags & VGCF_HVM_GUEST) )
+    else
     {
         if ( !get_page_and_type(mfn_to_page(phys_basetab>>PAGE_SHIFT), d,
                                 PGT_base_page_table) )
@@ -439,14 +446,6 @@ int arch_set_info_guest(
         }
     }
 
-    if ( c->flags & VGCF_HVM_GUEST )
-    {
-        v->arch.guest_table = mk_pagetable(0);
-
-        if ( !hvm_initialize_guest_resources(v) )
-            return -EINVAL;
-    }
-
     update_pagetables(v);
 
     if ( v->vcpu_id == 0 )